import redis
import json
import os
from datetime import datetime
from server.utils import BaseResponse


def backup_and_clear_key(key: str, redis_host, redis_port, redis_db):
    """
    这个函数用于备份指定的Redis key的value到具有时间戳的JSON文件，并清空该key。
    文件将被保存在一个具有代表性名称的目录中。
    """
    # 定义备份文件的目录和格式
    backup_dir = "redis_backups_logs"
    current_time = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
    backup_file = f"{backup_dir}/{key}_backup_{current_time}.json"

    try:
        # 确保备份目录存在
        if not os.path.exists(backup_dir):
            os.makedirs(backup_dir)

        # 连接到Redis
        r = redis.StrictRedis(host=redis_host, port=redis_port, db=redis_db)

        # 异步操作与redis库不兼容，需要使用同步调用或者寻找支持异步的Redis库如aioredis
        value = r.get(key)

        if value is not None:
            # 备份value到JSON文件
            with open(backup_file, "w", encoding='utf-8') as file:
                json.dump(json.loads(value), file, ensure_ascii=False)

            # 清空key
            r.delete(key)
            return BaseResponse(code=200, msg=f"Uid '{key}' backed up and cleared.")
        else:
            return BaseResponse(code=404, msg=f"Uid '{key}' not found.")
    except Exception as e:
        # 异常处理
        return BaseResponse(code=500, msg=str(e))

